<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--  -->
    <script>
        /**
         * 1 返回值
         * **/ 
        const fn1 = ()=>{
            let name = 'mjj';
            return function(){
                return name
            }
        }
        const fnc = fn1()
        console.log('fnc',fnc());
        
        /**
         * 2 函数赋值---一种变形的形式将内部函数赋值给一个外部的变量
         * **/ 
        let fn2;
        let fn3 = ()=>{
            let name = 'mjj2'
            fn2 = ()=>{
                return name
            }
        }
        fn3()
        console.log(fn2());
        
        /**
         * 3 函数参数--把函数作为一个参数传递到一个函数中来实现
         * **/ 
        function fn5(val){
            console.log('val',val()); // 在这里调用也行
        }
        function fn4(){
            var name = 'mjj3'
            var a = function(){
                return name
            }
            // fn5(a()) // 在这里调用也行--结果都一样
            fn5(a)
        }
        fn4()
        /**
         * 4 IIFE--立即调用函数
         * **/ 

        /**
         * 5 循环赋值
         * **/ 
        function f6(){
            var arr = []
            for(var i = 0; i < 10; i++){
                // (function(i){
                //     arr[i] = function(){
                //         console.log('i',i);
                //         return i
                //     }
                // })(i)
                arr[i] = (function(n){
                    return function(){
                        return n
                    }
                })(i)
            }
            return arr
        }
        let bar = f6()
        console.log(bar[3]());
        
        /**
         * 6 getter 和  setter
         * **/

        /**
         * 7 迭代器
         * **/

        /**
         * 8 区分首次
         * **/

        /**
         * 9 缓存机制
         * **/

        /**
         * 10 img对象 图片上报
         * **/
    </script>
</body>
</html>